package com.example.pattern.observer;

import com.example.pattern.observer.impl.Subject;
import com.example.pattern.observer.impl.TaskOne;
import com.example.pattern.observer.impl.TaskTwo;

/**
 * 观察者模式
 *  符合开闭原则
 *  可以在运行时建立对象之间的关系
 */
public class ObserverTest {

    public static void main(String[] args) {

        Subject subject = new Subject();
        subject.addObserver(new TaskOne("发消息"));
        subject.addObserver(new TaskOne("送积分"));
        // 实例化第一个观察者
        TaskOne cj = new TaskOne("抽奖");
        subject.addObserver(cj);
        //发通知
        subject.notifyEachObserver();
        System.out.println("第一个阶段完成");
        // 实例化第二个观察者
        subject.addObserver(new TaskTwo());
        subject.removeObserver(cj);
        subject.addObserver(new TaskTwo());
        //发通知
        subject.notifyEachObserver();
    }

}
